import 'dart:async';
import 'package:flutter/cupertino.dart';

// 点击事件帮助类
class TapHelper {
  //节流
  // 在触发事件时，立即执行目标操作，同时给出一个延迟的时间，
  // 在该时间范围内如果再次触发了事件，该次事件会被忽略，
  // 直到超过该时间范围后触发事件才会被处理。
  static VoidCallback throttle(Future Function() func) {
    bool enable = true;
    target() {
      if (enable) {
        enable = false;
        func().then((_) => enable = true);
      }
    }

    return target;
  }

  //防止抖动
  //在触发事件时，不立即执行目标操作，而是给出一个延迟的时间，
  // 在该时间范围内如果再次触发了事件，则重置延迟时间，直到延迟时间结束才会执行目标操作。
  static VoidCallback debounce(Function func,
      [Duration delay = const Duration(milliseconds: 1000)]) {
    Timer? timer;
    target() {
      if (timer?.isActive ?? false) {
        timer?.cancel();
      }
      timer = Timer(delay, () => func.call());
    }

    return target;
  }
}
